#ifndef _ARCH_ESPACIOS_LIBRES_H_
#define _ARCH_ESPACIOS_LIBRES_H_

/********************************************************************
 * ArchEspaciosLibres.h
 * 
 * Descripcion :Esta clase representa un archivo de datos de espacios 
 * libres que almacena los mismos en forma secuencial.
*********************************************************************/

#include "arch_control.h"

class ArchEspaciosLibres : public ArchControl{
			
	public:
	
		ArchEspaciosLibres(std::string& nombre, unsigned int tam_bloque);
	
		~ArchEspaciosLibres(){}
		
		TiposArchivo get_tipo_archivo();
		
		/*
		 * Dado un valor a sumar, agrega ese valor al total
		 * de espacio libre del bloque cuyo numero es el pasado como param.
		 */
		void actualizar_espacio_libre(unsigned int num_bloque,int valor_a_agregar);
		
		/*
		 * Dado un valor a setear, coloca ese valor de espacio libre del bloque
		 * cuyo numero es el pasado como param.
		 */
		void set_espacio_libre(unsigned int num_bloque, unsigned int valor);
		
		/*
		 * Devuelve el numero de bloque, del primer bloque que cumpla con el requisito
		 * del size minimo.
		 * Si ningun bloque tiene el espacio libre requerido devuelve -1.
		 */
		int consultar_espacio_libre(unsigned int size_minimo) throw(ExcepArchCerrado);
		
		/*
		 * Devuelve el espacio libre del bloque cuyo numero es el pasado por param.
		 */
		unsigned int consultar_espacio_bloque(unsigned int num_bloque);
		
		/*
		 * Devuelve el espacio libre total en bytes del archivo que esta siendo controlado
		 * por este arch de espacios libres.
		 */ 
		unsigned int get_espacio_libre_datos() throw (ExcepArchCerrado, ExcepLeerBloque);
		
};

#endif
